package com.yyh;
/*在com.ruandi.test15包中声明图形Graphic、圆Circle、矩形Rectangle类、三角形Triangle类
	2、图形Graphic类中有：
		①public double getArea()方法：返回面积
		②public double getPerimeter()方法：返回周长
		③public String getInfo()方法：返回图形信息
	3、圆类和矩形类重写这两个方法
	4、在com.ruandi.test15包中声明测试类Test15_1
	(1)请设计一个方法，可以用于比较两个图形的面积是否相等
	(2)请设计一个方法，可以用于找出两个图形中面积大的那个
	(3)public static void main(String[] args){}
	在主方法中，创建1个圆、1个矩形、1个三角形对象，并分别调用(1)、(2)方法进行测试。
	5、在com.ruandi.test15包中测试类Test15_2
	(1)请设计一个方法，可以用于遍历一个图形数组
	(2)请设计一个方法，可以用于给一个图形数组进行按照面积从小到大排序
	(3)public static void main(String[] args){}
	在主方法中，使用内部类创建3个图形对象，并添加到数组中，并调用(1)、(2)方法进行测试。
*/
public class Test4 {
    public static void main(String[] args) {
        Graphic[] graphics = new Graphic[3];
        graphics[0] = new Circle(5);
        graphics[1] = new Rectangle(5,10);
        graphics[2] = new Triangle(3,4,5);
        for (int i = 0; i < graphics.length; i++) {
            System.out.println(graphics[i].getInfo() + "的面积是：" + graphics[i].getArea());
        }
    }
}
//创建图形Graphic类
class Graphic{
    public double getArea(){
        return 0;
    }
    public double getPerimeter(){
        return 0;
    }
    public String getInfo(){
        return "图形";
    }
}
//创建圆类Circle类，继承图形类Graphic
class Circle extends Graphic{
    private double radius;
    public Circle(double radius){
        this.radius = radius;
    }
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
    @Override
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
    @Override
    public String getInfo() {
        return "圆";
    }
}
//创建矩形类Rectangle类，继承图形类Graphic
class Rectangle extends Graphic{
    private double width;
    private double height;
    public Rectangle(double width,double height){
        this.width = width;
        this.height = height;
    }
    @Override
    public double getArea() {
        return width * height;
    }
    @Override
    public double getPerimeter() {
        return 2 * (width + height);
    }
    @Override
    public String getInfo() {
        return "矩形";
    }
}
//创建三角形类Triangle类，继承图形类Graphic
class Triangle extends Graphic{
    //属性三条边
    private double a;
    private double b;
    private double c;
    public Triangle(double a,double b,double c){
        this.a = a;
        this.b = b;
        this.c = c;
    }
    //计算面积
    @Override
    public double getArea() {
        double p = (a + b + c) / 2;
        return Math.sqrt(p * (p - a) * (p - b) * (p - c));
    }
    //计算周长
    @Override
    public double getPerimeter() {
        return a + b + c;
    }
    //获取图形信息
    @Override
    public String getInfo() {
        return "三角形";
    }
}
